package cn.cqie.attendance.manager.service;

import cn.cqie.attendance.common.util.Page;
import cn.cqie.attendance.common.util.PageBean;
import cn.cqie.attendance.manager.pojo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @author 697
 * @date 2021/7/2 14:34
 */
@Service
public interface AdminCourseService {

    /**
     * 查询你所有课程信息 可以组合模糊查询
     * @param adminCourseSerch
     * @param pageSize 每页的数量
     * @param pageNum 当前页
     * @return
     */
    PageBean<AdminCourse> queryAllCourseInfo(AdminCourseSerch adminCourseSerch, Integer pageSize, Integer pageNum);


    /**
     * 根据ID查询课程信息
     * @param courseId id
     * @return
     */
    Page<AdminCourse> queryCourseInfoById(Integer courseId);


    /**
     * 查询所有老师 用于选择实训老师
     * @return
     */
    Page<AdminTeacher> queryChooseTrainerTeacher();


    /**
     * 新增课程信息 不包括实训老师
     * @param adminCourse
     * @return
     */
    int addCourseInfoNoTrainTeacher(AdminCourse adminCourse);


    /**
     * 新增实训老师
     * @param adminTrainTeacherCourse
     * @return
     */
    int addTrainTeacher(AdminTrainTeacherCourse adminTrainTeacherCourse);

   /**
    * 判断是否存在课程名重复、课程时间重复的课程
    */
    //int queryCourseTimeCount(AdminCourse adminCourse);


    /**
     * 新增课程信息
     * @param adminCourse
     * @param listTrainTeacher
     * @return
     */
    Page addCourseInfo(AdminCourse adminCourse, List<AdminTrainTeacherCourse> listTrainTeacher);


    /**
     * 根据id修改课程信息 不包括实训老师
     * @param adminCourse
     * @return
     */
    int updateCourseByIdNoTrainTeacher(AdminCourse adminCourse);


    /**
     * 根据id修改课程实训老师
     * @param adminTrainTeacherCourse
     * @return
     */
    int updateTrainTeacher(AdminTrainTeacherCourse adminTrainTeacherCourse);


    /**
     * 根据课程id修改课程信息
     * @param adminCourse
     * @param listTrainTeacher
     * @return
     */
    Page updateCourseById(AdminCourse adminCourse, List<AdminTrainTeacherCourse> listTrainTeacher);


    /**
     * 根据课程id删除课程实训老师
     * @param courseId 课程id
     * @return
     */
    int deleteTrainerTeacherByCourseId(Integer courseId);


    /**
     * 课程选择学生
     * @param listGroupId
     * @param courseId
     * @return
     */
    Page addStudentToCourse(List listGroupId,Integer courseId,List listStudentId);


    /**
     * 查询课程中某个学生数量 用来判断学生是否重复
     * @param adminCourseStudentMsg
     * @return
     */
    int queryCountStudentInCourse(AdminCourseStudentMsg adminCourseStudentMsg);


    /**
     * 查询选择所有分组下面的学生
     * @param listGroupId
     * @return
     */
    Page<List<AdminStudent>> queryStudentByAllGroupId(List listGroupId);


    /**
     * 根据id查询学生详情
     * @param studentId
     * @return
     */
    Page<AdminStudent> queryStudentByStudentId(Integer studentId);


    /**
     * 根据分组id查询学生
     * @param groupId
     * @return
     */
    Page<AdminStudent> queryStudentByGroupId(Integer groupId);


    /**
     * 根据课程ID删除课程信息
     * @param courseId 课程ID
     * @return
     */
    Page deleteCourseById(Integer courseId);


    /**
     *  复制课程信息
     * @param adminCourse 课程
     * @param listTrainTeacher 实训老师
     * @return
     */
    Page CopyCourseInfoById(AdminCourse adminCourse, List<AdminTrainTeacherCourse> listTrainTeacher,Integer courseId);


    /**
     * 根据id查询班级学生 用于复制
     * @param courseId
     * @return
     */
    Page<AdminCourseStudentMsg> queryStudentByCourseId(Integer courseId);


    /**
     * 复制学生进课程
     * @param courseId 课程
     * @return
     */
    Page copyStudentToCourse(Integer courseId);

}
